package com.ghy.service;

import com.ghy.dto.*;
import com.ghy.excel.UserExcelDTO;
import com.ghy.vo.LoginVO;
import com.ghy.vo.RoleSimpleListVO;
import com.ghy.vo.UserSimpleListVO;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.ghy.entity.User;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 用户表 服务层。
 *
 * @author ghy
 * @since 2024-12-22
 */
public interface UserService extends IService<User> {

    boolean insert(UserInsertDTO dto);
    User select(Long id);
    List<UserSimpleListVO> simpleList();
    Page<User> page(UserPageDTO dto);
    boolean update(UserUpdateDTO dto);
    boolean delete(Long id);
    boolean deleteBatch(List<Long> ids);

    /**
     * *按主键查询该用户的全部角色ID列表
     * @param id 角色主键
     * @return 该该用户的全部角色ID列表
     */
    List<Long> listRoleIds(Long id);

    /**
     *  按主键修改该用户的角色列表
     * @param dto 用户修改DTO
     * @return true
     */
    boolean updateRoles(UserUpdateDTO dto);

    boolean resetPassword(Long id);

    /**
     * 修改用户密码
     *
     * @param dto 修改密码DTO
     * @return true修改成功，false修改失败
     */
    boolean updatePassword(UserUpdatePasswordDTO dto);


    /**
     **统计用户数据
     *
     * @return 统计结果
     */
     Map<String, Object> statistics() ;

    /**
     * 用户Excel记录
     *
     * @return 全查用户记录，Excel类型的数据
     */
    List<UserExcelDTO> excel();


    /**
     * 根据手机号码生成一个随机的4位短信验证码
     *
     * @param phone 手机号码
     * @return    一个随机的4位短信验证码
     */
    String getVcode(String phone);


    LoginVO loginByAccount(LoginByAccountDTO dto);

    /**
     * 根据手机号码 + 验证码登录
     * @param dto 用户登录DTO
     * @return 回登陆成功的用户记录，Token令牌以及菜单列表
     */
    LoginVO loginByPhone(LoginByPhoneDTO dto);

    /**
     *  根据用户主键上传头像
     *
     * @param avatarFile  头像文件
     * @param id  用户主键
     * @return 返回新文件名
     */
    String uploadAvatar(MultipartFile avatarFile, Long id);
}
